From cf1782144735efb98b76227a97abb8787ffccb94 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 10 Nov 2010 13:58:16 +0000 Subject: [PATCH] hvmloader: fix off-by-one-bit error when initialising PCI devices hvmloader is responsible for - amoungst other things - initialising the PCI device BARs prior to loading the guest BIOS. The previous code only probed for devfn up to 128. The lower 3 bits are function IDs so this meant that only devices in slots 0-15 were actually being initialized. Signed-off-by: Alex Zeffertt Acked-by: Gianni Tedesco --- tools/firmware/hvmloader/hvmloader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index d6717edb2b..893d5dc5a3 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -197,7 +197,7 @@ static void pci_setup(void) outb(0x4d1, (uint8_t)(PCI_ISA_IRQ_MASK >> 8)); /* Scan the PCI bus and map resources. */ - for ( devfn = 0; devfn < 128; devfn++ ) + for ( devfn = 0; devfn < 256; devfn++ ) { class = pci_readw(devfn, PCI_CLASS_DEVICE); vendor_id = pci_readw(devfn, PCI_VENDOR_ID); @@ -474,7 +474,7 @@ static int scan_etherboot_nic(uint32_t copy_rom_dest) uint16_t class, vendor_id, device_id; int rom_size = 0; - for ( devfn = 0; (devfn < 128) && !rom_size; devfn++ ) + for ( devfn = 0; (devfn < 256) && !rom_size; devfn++ ) { class = pci_readw(devfn, PCI_CLASS_DEVICE); vendor_id = pci_readw(devfn, PCI_VENDOR_ID); @@ -501,7 +501,7 @@ static int pci_load_option_roms(uint32_t rom_base_addr) uint16_t vendor_id, device_id; uint8_t devfn, class; - for ( devfn = 0; devfn < 128; devfn++ ) + for ( devfn = 0; devfn < 256; devfn++ ) { class = pci_readb(devfn, PCI_CLASS_DEVICE + 1); vendor_id = pci_readw(devfn, PCI_VENDOR_ID); -- 2.30.2